#ifndef CLIB_MAIN_H
#define CLIB_MAIN_H

#pragma once

#include "clib_core.h"
#include "inc/clib_type.h"
#include "inc/clib_config.h"
#include "inc/clib_command.h"
#include <getopt.h>

static i32_t dpdk_argc = 0;

static char dpdk_argv[128][256] = {0};

extern clib_cycle_t clib_cycle_conf;

extern clib_config_t clib_conf_load;

static const char *clib_option_short = "hvsc:l:";

static u08_t* clib_conf_name = "clib_conf_name.conf";

static u08_t* clib_log_name  = "clib_log_name.log";

static struct option clib_option_long[] =
{
    /** 程序帮助命令 **/
    {"help",    no_argument,        NULL, 'h'},
    /** 程序版本 **/
    {"version", no_argument,        NULL, 'v'},
    /** 模块配置帮助 **/
    {"show",    no_argument,        NULL, 's'},
    /** 程序cfg文件 **/
    {"conf",    required_argument,  NULL, 'c'},
    /** 程序log文件 **/
    {"log",     required_argument,  NULL, 'l'},

    {NULL,      0,                  NULL,  0 }
};

/**
 * 解析程序启动参数
 *
 * @param argc  启动程序参数个数
 * @param argv  启动程序参数
 * @return
 *    0 成功
 *   -1 程序退出  
 */
i32_t clib_option_pars(i32_t argc,char** argv);

/**
 * 程序参数打印
 */
void clib_option_help();

/**
 *   加载配置文件
 * 
 * @param cfg 配置文件
 * @return 
 *   0  成功
 *   -1 失败
 */
i32_t clib_load_conf(const char* cfg);


i32_t clib_netif_init(clib_cycle_t *cycle);


i32_t clib_load_module(clib_cycle_t *cycle);

#endif